package 校赛.真题._2022校赛;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

/**
 * @author 挚爱之夕
 * @version 1.0
 * @implSpec 题目描述
 * 小A在玩一个游戏，游戏的目标是打败BOSS。
 * BOSS共有m点生命值，小A的武器是一个电磁炮，每次开启需要蓄力x秒，
 * 当电磁炮蓄力完毕后，它会持续攻击，每秒扣除BOSS的1点生命值。
 * 但是因为武器自身有一些问题，在一些特定的时间，它会强制关闭。
 * 如果当前在攻击状态，那么攻击无效，转成蓄力；如果当前在蓄力时间，那么结束当前蓄力，蓄力重新计时。
 * 最后一次强制关闭后，电磁炮就无法再启动了。
 * 小A不停地重复玩这个游戏，但每局中电磁炮的强制关闭时间是相同的，
 * 但是蓄力需要的时间以及BOSS的生命值并不相同，请你帮忙判断每局中小A是否可以打败BOSS，
 * 小A是否可以击败BOSS，则输出”YES”，反之输出“NO”。每局之间相互独立。
 * <p>
 * 输入格式
 * 第一行包含两个正整数n,q,表示武器强制关闭的次数以及局数，
 * 第二行n个正整数t1,t2,...,tn,表示n个强制关闭的时间点。
 * 接下来q行表示q局游戏，每行两个正整数ki,pi,分别表示第i个电磁炮的蓄力时间和BOSS的生命值。
 * <p>
 * 输出格式
 * 共q行，每一行输出YES或者NO。
 * <p>
 * 数据范围
 * 1 ≤ n,q ≤ 100000,
 * 1 ≤ ti ≤ 1000000000,t1为0，且ti按照升序给出，切互不相同
 * 1 ≤ ki,pi,≤ 100000
 * <p>
 * 样例1
 * 输入数据 1
 * 5 4
 * 0 1 4 8 9
 * 3 1
 * 3 2
 * 2 3
 * 1 20
 * 输出数据 1
 * YES
 * NO
 * YES
 * NO
 * 样例1解释
 * 对于第一局3 1：电磁炮可以造成0+0+1+0=1点伤害，大于等于1点生命值，所以可以将BOSS击败，输出YES。
 * 对于第二局3 2：电磁炮可以造成0+0+1+0=1点伤害，小于2点生命值，所以不可以将BOSS击败，输出NO。
 * 对于第三局2 3：电磁炮可以造成0+1+2+0=3点伤害，大于等于3点生命值，可以将BOSS击败，输出YES。
 * 对于第四局1 20：电磁炮可以造成0+2+3+0=5点伤害，小于20点生命值，所以不可以将BOSS击败，输出NO。
 * @since 2023 - 03 - 28 - 20:54
 */
public class G_Boss {
}

class Main_G {
    static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer tokenizer = new StringTokenizer("");
    static String nextLine() throws IOException {
        return reader.readLine();
    }
    static String next() throws IOException {
        if (!tokenizer.hasMoreTokens()) {
            tokenizer = new StringTokenizer(nextLine());
        }
        return tokenizer.nextToken();
    }
    static int nextInt() throws IOException {
        return Integer.parseInt(next());
    }
    static long nextLong() throws IOException {
        return Long.parseLong(next());
    }
    //两次关闭的时间间隔
    static long[] interval;
    //前缀和
    static long[] sums;
    public static void main(String[] args) throws IOException {
        int n = nextInt(), q = nextInt();
        long[] times = new long[n + 1];
        interval = new long[n];
        sums = new long[n];
        for (int i = 1; i <= n; i++) {
            times[i] = nextLong();
        }
        for(int i = 1; i < n; i++){
            //计算相邻两次关闭的时间间隔
            interval[i] = times[i + 1] - times[i];
        }
        //排序
        Arrays.sort(interval, 1, n);
        //构造前缀和
        for(int i = 1; i < n; i++){
            sums[i] = sums[i - 1] + interval[i];
        }
        int k, p;
        while (q-- > 0) {
            k = nextInt();
            p = nextInt();
            //计算对Boos造成的伤害，大于蓄力时间的蓄力才是有效的
            //找第一个大于k的
            int l = 1, r = n - 1, mid;
            while(l < r){
                mid = l + ((r - l) >> 1);
                if(interval[mid] > k){
                    r = mid;
                }else{
                    l = mid + 1;
                }
            }
            if(interval[l] < k){
                l++;
            }

            //要减去蓄力时间
            long cnt = sums[n - 1] - sums[l - 1] - (long) k * (n - 1 - l + 1);
            if(cnt >= p){
                System.out.println("YES");
            }else{
                System.out.println("NO");
            }
        }
    }
}
